<?php
/*
 * 2021/7/15
 * 22:00
 * User: 2650332702@qq.com
 */
namespace App\Api\Manages;


use App\Api\Bases\BaseController;
use App\Api\Services\JsonService;

class CommonController extends BaseController
{
    //分页数据重构
    public function PagingData($pagedata = [])
    {
        if(!is_array($pagedata)) $pagedata = $pagedata->toArray();
        if(empty($pagedata)){
            return JsonService::fail('数据不完整');
        }
        foreach ($pagedata['data'] as &$once){
            $once['percentage']=round(($once['paid_num']/$once['stock'])*100);
        }
        $data = [
            'current_page'=>$pagedata['current_page'],
            'data'=>$pagedata['data'],
            'total_pages'=>$pagedata['last_page'],
            'total_data'=>$pagedata['total'],
            'current_data'=>$pagedata['per_page']
        ];
        return JsonService::success($data);

    }


    /**
     * @param $string string 加密的字符串
     * @param string $key
     * @return string
     */
    public static function encrypt($string, $key = 'password')
    {
        $keyIds = md5(substr($key, 0, 16));
        return md5($keyIds.$string);
    }

    /**
     * 身份证验证
     * @param $card
     * @return bool
     */
    public static function setCard($card){
        $city = [11=>"北京",12=>"天津",13=>"河北",14=>"山西",15=>"内蒙古",21=>"辽宁",22=>"吉林",23=>"黑龙江 ",31=>"上海",32=>"江苏",33=>"浙江",34=>"安徽",35=>"福建",36=>"江西",37=>"山东",41=>"河南",42=>"湖北 ",43=>"湖南",44=>"广东",45=>"广西",46=>"海南",50=>"重庆",51=>"四川",52=>"贵州",53=>"云南",54=>"西藏 ",61=>"陕西",62=>"甘肃",63=>"青海",64=>"宁夏",65=>"新疆",71=>"台湾",81=>"香港",82=>"澳门",91=>"国外 "];
        $tip = "";
        $match = "/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/";
        $pass= true;
        if(!$card || !preg_match($match,$card)){
            //身份证格式错误
            $pass = false;
        }else if(!$city[substr($card,0,2)]){
            //地址错误
            $pass = false;
        }else{
            //18位身份证需要验证最后一位校验位
            if(strlen($card) == 18){
                $card = str_split($card);
                //∑(ai×Wi)(mod 11)
                //加权因子
                $factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
                //校验位
                $parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];
                $sum = 0;
                $ai = 0;
                $wi = 0;
                for ($i = 0; $i < 17; $i++)
                {
                    $ai = $card[$i];
                    $wi = $factor[$i];
                    $sum += $ai * $wi;
                }
                $last = $parity[$sum % 11];
                if($parity[$sum % 11] != $card[17]){
//                        $tip = "校验位错误";
                    $pass =false;
                }
            }else{
                $pass =false;
            }
        }
        if(!$pass) return false;/* 身份证格式错误*/
        return true;/* 身份证格式正确*/
    }



    /**
     * 随机数
     * @param bool $prefix
     * @param bool $random
     * @return string
     */
    public static function makeRandomNumber($prefix = false, $random = false)
    {
        if (!$prefix) {
            $prefix = "";
        }
        if (!$random || !is_numeric($random)) {
            $oneRandom = mt_rand(1111,9999);
        }else{
            $oneRandom = sprintf("%05d", $random);
        }
        $dateRandom = date('ymd',time());
        $randomTmp = strlen($oneRandom);
        $twoRandow = str_pad(mt_rand(1, 9999), $randomTmp, '0', STR_PAD_LEFT);
        if (!$random) {
            return $twoRandow;
        }else{
            return $prefix.$oneRandom.$dateRandom.$twoRandow;
        }
    }

    //根据时间获得这一天的时间
    static public function nowDay(string $time)
    {
        return date('Y-m-d',strtotime($time));
    }

    /**
     * 发送手机验证码
     * @param $phone string 手机号码
     * @param $number string 随机字符串验证码
     * @return mixed
     */
    public static function sendPhoneCode($phone, $number)
    {
        //从配置中取出请求地址、appkey
        $gateway = config('common.phone.gateway');
        $appkey = config('common.phone.appkey');
        $content = "【品优购】你的验证码是：{$number}，3分钟内有效！";
        $url = $gateway . '?mobile=' . $phone . '&content=' . $content . '&appkey=' . $appkey;
        //get
        //$res = curl_request($url, false, [], true);
        //post请求
        $params = [
            'mobile' => $phone,
            'content' => $content
        ];

        $result = Common::curl_request($url, true, $params, true);
        return json_decode($result,true);

    }


    static public function distinguish($data,$payment=[],$delivered=[],$received=[],$comment=[])
    {
        foreach ($data as &$item){
            if($item['status']==0){
                //待付款
                $payment[] = $item;
            }elseif ($item['status']==1){
                //待发货
                $delivered[] = $item;
            }elseif ($item['status']==2){
                //待收货
                $received[] = $item;
            }elseif ($item['status']==4){
                //待评价
                $comment[] = $item;
            }
        }
        return ['all'=>$data,'payment'=>$payment,'delivered'=>$delivered,'received'=>$received,'comment'=>$comment];

    }
    //字符串处理使用
    public function arrayByStr($str)
    {
        return json_decode($str,true);
    }

}